User Registration, Login, এবং Logout ব্যবস্থা

User Authentication এবং Authorization - মিনজেএস (MeanJS) - Web Development

202

MeanJS স্ট্যাক ব্যবহার করে User Registration, Login, এবং Logout ব্যবস্থা তৈরি করা একটি সাধারণ, কিন্তু গুরুত্বপূর্ণ কার্যকলাপ। এটি সাধারণত Express.js (সার্ভার সাইড) এবং AngularJS (ফ্রন্টএন্ড) এর মাধ্যমে পরিচালিত হয়। এই ব্যবস্থাগুলোর মধ্যে Authentication এবং Authorization ব্যবহৃত হয়, যাতে ব্যবহারকারীর তথ্য নিরাপদ থাকে এবং শুধুমাত্র অনুমোদিত ব্যবহারকারীরাই সিস্টেমে লগইন করতে পারে।

এখানে আমরা JWT (JSON Web Token) ভিত্তিক সিকিউরিটি ব্যবহার করব, যা একটি নিরাপদ এবং জনপ্রিয় উপায় ব্যবহারকারীদের সেশন পরিচালনা করার জন্য।


১. Back-End (Express.js): User Registration, Login, এবং Logout

MongoDB মডেল তৈরি করা:

প্রথমে, User মডেল তৈরি করতে হবে যাতে ব্যবহারকারীদের নাম, ইমেইল, এবং পাসওয়ার্ড সংরক্ষণ করা হবে।

// models/user.model.js

const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');

const userSchema = new mongoose.Schema({
  name: { type: String, required: true },
  email: { type: String, required: true, unique: true },
  password: { type: String, required: true }
});

// পাসওয়ার্ড হ্যাশ করা
userSchema.pre('save', async function(next) {
  if (!this.isModified('password')) return next();
  this.password = await bcrypt.hash(this.password, 10);
  next();
});

// পাসওয়ার্ড তুলনা করার মেথড
userSchema.methods.comparePassword = async function(candidatePassword) {
  return await bcrypt.compare(candidatePassword, this.password);
};

const User = mongoose.model('User', userSchema);

module.exports = User;

এখানে, bcryptjs ব্যবহার করা হয়েছে পাসওয়ার্ড হ্যাশিং করার জন্য। আমরা pre('save') হুক ব্যবহার করে পাসওয়ার্ড সেভ করার আগে হ্যাশ করেছি এবং comparePassword মেথড ব্যবহার করে পাসওয়ার্ডের মিল চেক করব।

JWT টোকেন ক্রিয়েশন:

এখন, আমরা jsonwebtoken প্যাকেজ ব্যবহার করে লগইন করার পর একটি JWT টোকেন তৈরি করব।

npm install jsonwebtoken bcryptjs

Authentication রাউট তৈরি করা:

এখন আমরা POST রাউট তৈরি করব যা ব্যবহারকারীকে রেজিস্টার এবং লগইন করতে সহায়ক হবে।

// routes/auth.route.js

const express = require('express');
const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
const User = require('../models/user.model');
const router = express.Router();

// JWT সিক্রেট কী
const JWT_SECRET = 'your-secret-key';

// রেজিস্ট্রেশন রাউট
router.post('/register', async (req, res) => {
  const { name, email, password } = req.body;

  try {
    const userExists = await User.findOne({ email });
    if (userExists) {
      return res.status(400).json({ message: 'User already exists' });
    }

    const newUser = new User({ name, email, password });
    await newUser.save();
    res.status(201).json({ message: 'User registered successfully' });
  } catch (err) {
    res.status(500).json({ message: 'Error in registration' });
  }
});

// লগইন রাউট
router.post('/login', async (req, res) => {
  const { email, password } = req.body;

  try {
    const user = await User.findOne({ email });
    if (!user) {
      return res.status(400).json({ message: 'Invalid email or password' });
    }

    const isMatch = await user.comparePassword(password);
    if (!isMatch) {
      return res.status(400).json({ message: 'Invalid email or password' });
    }

    const token = jwt.sign({ userId: user._id }, JWT_SECRET, { expiresIn: '1h' });
    res.status(200).json({ token });
  } catch (err) {
    res.status(500).json({ message: 'Error in login' });
  }
});

// লগআউট রাউট (JWT টোকেন রিভোকেশন)
router.post('/logout', (req, res) => {
  // ক্লায়েন্ট সাইডে টোকেন মুছে ফেলা হবে, এখানে সার্ভারে কোনো টোকেন রিভোকেশন দরকার নেই।
  res.status(200).json({ message: 'Logged out successfully' });
});

module.exports = router;

এখানে:

  • /register রাউট ব্যবহারকারীদের নিবন্ধন করার জন্য,
  • /login রাউট ব্যবহারকারীদের লগইন করার জন্য,
  • /logout রাউট ব্যবহারকারীদের লগআউট করার জন্য (এই ক্ষেত্রে, ক্লায়েন্ট সাইডে টোকেন রিভোকেশন করতে হবে)।

২. Front-End (Angular): User Registration, Login, এবং Logout

HTTPClient মডিউল ব্যবহার করা:

এখানে, আমরা Angular অ্যাপ্লিকেশন তৈরি করব যেখানে ব্যবহারকারী রেজিস্ট্রেশন, লগইন এবং লগআউট করতে পারবেন।

প্রথমে HttpClientModule ইম্পোর্ট করুন:

// app.module.ts

import { HttpClientModule } from '@angular/common/http';

@NgModule({
  imports: [HttpClientModule],
})
export class AppModule {}

API সার্ভিস তৈরি করা:

// src/app/auth.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class AuthService {
  private apiUrl = 'http://localhost:3000/api';

  constructor(private http: HttpClient) {}

  // রেজিস্ট্রেশন ফাংশন
  register(name: string, email: string, password: string): Observable<any> {
    return this.http.post(`${this.apiUrl}/register`, { name, email, password });
  }

  // লগইন ফাংশন
  login(email: string, password: string): Observable<any> {
    return this.http.post(`${this.apiUrl}/login`, { email, password });
  }

  // লগআউট ফাংশন
  logout() {
    localStorage.removeItem('token');
  }

  // টোকেন গ্রহণ
  getToken() {
    return localStorage.getItem('token');
  }
}

AuthComponent তৈরি করা:

// src/app/auth/auth.component.ts

import { Component } from '@angular/core';
import { AuthService } from '../auth.service';
import { Router } from '@angular/router';

@Component({
  selector: 'app-auth',
  template: `
    <div>
      <h2>Login</h2>
      <form (submit)="login()">
        <input [(ngModel)]="email" type="email" placeholder="Email" required />
        <input [(ngModel)]="password" type="password" placeholder="Password" required />
        <button type="submit">Login</button>
      </form>
    </div>
  `
})
export class AuthComponent {
  email: string;
  password: string;

  constructor(private authService: AuthService, private router: Router) {}

  login() {
    this.authService.login(this.email, this.password).subscribe(response => {
      localStorage.setItem('token', response.token);
      this.router.navigate(['/dashboard']);
    });
  }
}

এখানে, AuthComponent ব্যবহারকারীর login ফর্ম গ্রহণ করে এবং AuthService এর মাধ্যমে লগইন রিকোয়েস্ট পাঠায়।


৩. JWT এর সাহায্যে সুরক্ষিত রুট

Angular অ্যাপ্লিকেশন থেকে সুরক্ষিত রুট অ্যাক্সেস করার জন্য, আমরা JWT টোকেন ব্যবহার করব। AuthGuard ব্যবহার করে, আমরা চেক করব যে ইউজারের টোকেন রয়েছে কি না।

// src/app/auth.guard.ts

import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';
import { AuthService } from './auth.service';
import { Router } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {
  constructor(private authService: AuthService, private router: Router) {}

  canActivate(): boolean {
    if (!this.authService.getToken()) {
      this.router.navigate(['/login']);
      return false;
    }
    return true;
  }
}

এটি চেক করবে যে ব্যবহারকারী লগইন অবস্থায় আছেন কিনা, এবং যদি না থাকেন, তবে /login পেজে রিডাইরেক্ট করবে।


সারাংশ

এই উদাহরণে, আমরা MeanJS স্ট্যাক ব্যবহার করে একটি User Registration, Login, এবং Logout ব্যবস্থা তৈরি করেছি। Express.js ব্যবহার করে JWT ভিত্তিক অথেনটিকেশন তৈরি করা হয়েছে এবং Angular এ লগইন, রেজিস্ট্রেশন, এবং লগআউটের ব্যবস্থাপনা করা হয়েছে। JWT টোকেন ব্যবহার করে নিরাপদভাবে ব্যবহারকারীদের লগইন এবং লগআউট পরিচালিত হয়েছে, যা সুরক্ষিত অ্যাপ্লিকেশন তৈরি করতে সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...